<?php namespace Common\Model; 
//引入Model类
use Hdphp\Model\Model;
use Common\Model\Cate;
use Common\Model\GoodsAttr;
use Common\Model\GoodsDetail;
use Common\Model\GoodsList;

//类型管理(实现增删改查)
class Goods extends Model{
	//绑定wsshop_goods表
	protected $table = 'goods';
	
	//自动验证
	protected $validate=array(
		//array('字段名','验证方法','错误信息',验证条件,验证时间);
		array('gname','required','商品名称不可为空',3,3),//商品名称不能为空
	);
	
	//自动完成
	protected $auto=array(
		//array('字段名','处理方法','方法类型',处理条件,处理时间);
		array('time','time','function',3,1),//获取当前添加商品的时间戳
		array('gnumber','time','function',3,1),//商品表的货号
		array('wsshop_type_tid','getTid','method',3,3),//编辑商品时处理商品属性
	);
	
	//获取所属分类对应的类型ID
	public function getTid(){
		//1.获取商品所属分类ID
		$cid=Q('post.wsshop_category_cid');
		//2.获取对应的类型ID-wsshop_category表
		$cateModel = new Cate;
		$tid=$cateModel->where("cid={$cid}")->pluck('wsshop_type_tid');
		//3.返回值
		return $tid;
	}
	
	//添加商品
	public function store(){
		//一.添加商品表-wsshop_goods
			//1.创建$this->create()，会自动触发：1自动验证；2自动完成；3传入数据；如果创建失败返回false
			$uploadListviewPath=Q('post.listview');//获取上传的列表图路径
			$listPathInfo=pathinfo($uploadListviewPath);//获取路径信息
			$listimg=str_replace(".{$listPathInfo['extension']}", "_list.{$listPathInfo['extension']}", $uploadListviewPath);//缩略图，列表图
			$_POST['listview']=$listimg;//把列表图压入$_POST
			
			if(!$this->create()) return false;
			//2.添加商品表-wsshop_goods,返回自增id
			$gid= $this->add();
		
		//二.添加商品属性表-wsshop_goods_attr表
			//1.实例化商品属性对象
			$goodsAttrModel = new GoodsAttr;
			//2.属性添加
			foreach (Q('post.attr') as $taid => $v) {
				//如果属性有传值过来,就添加
				if($v){
					$data = array(
						'gavalue'=>$v,//对应的属性
						'wsshop_type_attr_taid'=>$taid,//对应的类型属性ID
						'wsshop_goods_gid'=>$gid//对应的商品ID
					);
					//先添加属性
					$goodsAttrModel->add($data);
				}
			}
			//3.规格添加
			$spec = Q('post.spec');
				//如果有规格就执行添加
				if($spec){
					//获取类型属性规格的值
					$value = $spec['value'];
					//循环添加-二维数组
					foreach ($value as $taid => $v) {
						//载循环-一维数组
						foreach ($v as $kk => $vv) {
							$data = array(
								'gavalue'=>$vv,//规格
								'wsshop_type_attr_taid'=>$taid,//对应的类型属性ID
								'wsshop_goods_gid'=>$gid,//对应的商品ID
								'extraprice'=>$spec['extraprice'][$taid][$kk]//附加价格
							);
							$goodsAttrModel->add($data);
						}
					}
				}
				
		//四.添加商品详情表-wsshop_goods_detail表
			//1.实例化商品详情表-wsshop_goods_detail表
			$goodsDetailModel = new GoodsDetail;	
			//2.获取商品详情
			$details = Q('post.details');
			//3.获取商品详情表-上传的商品图册-的，小中大3张图片，按小图|中图|大图拼接存到字段名gdpic中
				//3.1获取上传的原图的路径
				$path=Q('post.gdpic');
				
				//3.2获取原图信息
				$imgInfo = [];
				foreach ($path as $k => $v) {
					$imgInfo[$k]=pathinfo($v);
				}
				
				//3.把上传过来的3张图片组合成字符串
				$thumb = [];
				foreach ($imgInfo as $k => $v) {
					$thumb[$k]=str_replace(".{$v['extension']}", "_thumb.{$v['extension']}", $path[$k]);
				}
				$gdpic = implode(',', $thumb);
				
			//4.压倒数组中	
			$data = array(
				'gdpic'=>$gdpic,
				'details'=>$details,
				'wsshop_goods_gid'=>$gid
			);
			//5.添加商品详情表表-wsshop_goods_detail表
			$goodsDetailModel->add($data);
		
		//添加成功后返回true
		return true;
	}

	//修改商品信息
	public function edit(){
//		p(Q('post.'));exit;
	//1.修改商品表
	$gid = Q('get.gid',0,'intval');
	if(!$this->create()) return false;
	//修改页面要添加隐藏域
	$this->save();
		
	//2.修改商品属性表-思路：先删除再添加
	$goodsAttrModel = new \Common\Model\GoodsAttr;
	$attr = Q('post.attr');
	$goodsAttrModel->where("wsshop_goods_gid={$gid}")->delete();
	
	//属性添加
	foreach (Q('post.attr') as $taid => $v) {
				if($v){
					$data = array(
						'gavalue'=>$v,//对应的属性
						'wsshop_type_attr_taid'=>$taid,//对应的类型属性ID
						'wsshop_goods_gid'=>$gid//对应的商品ID
					);
					$goodsAttrModel->add($data);
				}
			}
			
	//规格添加
	
	$spec = Q('post.spec');
	
	//如果有规格就执行添加
	if($spec){
		//获取类型属性规格的值
		$value = $spec['value'];
		//循环添加-二维数组
		foreach ($value as $taid => $v) {
			//载循环-一维数组
			foreach ($v as $kk => $vv) {
				$data = array(
					'gavalue'=>$vv,//规格
					'wsshop_type_attr_taid'=>$taid,//对应的类型属性ID
					'wsshop_goods_gid'=>$gid,//对应的商品ID
					'extraprice'=>$spec['extraprice'][$taid][$kk]//附加价格
				);
				$goodsAttrModel->add($data);
			}
		}
	}
		
	//3.修改详情表
	$goodsDetailModel = new \Common\Model\GoodsDetail;
	$goodsDetailModel->create();
	$gdpic = $goodsDetailModel->data['gdpic'];
	$goodsDetailModel->data['gdpic']=implode(',',$gdpic);
	$goodsDetailModel->where("wsshop_goods_gid={$gid}")->save();
	return true;
	}
	
	//获取相同分类的商品数据
	public function sameCate($allCate,$cid){
		
		$temp = [];
		//取得所有相同祖先的cid
		foreach ($allCate as $k => $v) {
			if($v['pid'] ==$cid ){//如果当前分类下有子级
				$temp[] = $v['cid'];//把当前cid压入
				$temp = array_merge($temp,$this->sameCate($allCate,$v['cid']));//子级的下面可能还有子级
			}
		}
		return $temp;
	}
	
}
